﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using TES.EnteRegulador;

namespace TES.WEB.EnteRegulador
{
    public class ComparadorMergeRedVisual : IComparer<MergeRedVisual>
    {
        private string _propiedad;
        #region IComparer<MergeRedVisual>      Members

        public ComparadorMergeRedVisual(string propiedad)
        {
            _propiedad = propiedad;
        }

        public int Compare(MergeRedVisual red1, MergeRedVisual red2)
        {
            int returnValue = 1;
            if (red1 != null && red2 != null)
            {
                switch (_propiedad)
                {
                    case "NumeroRed":
                        if (red1.NumeroRed.HasValue && !red2.NumeroRed.HasValue)
                        {
                            returnValue = int.MinValue.CompareTo(red1.NumeroRed.Value);
                        }
                        else if (!red1.NumeroRed.HasValue && red2.NumeroRed.HasValue)
                        {
                            returnValue = red2.NumeroRed.Value.CompareTo(int.MinValue);
                        }
                        else if (!red1.NumeroRed.HasValue && !red2.NumeroRed.HasValue)
                        {
                            returnValue = 1;
                        }
                        else
                        {
                            returnValue = red2.NumeroRed.Value.CompareTo(red1.NumeroRed.Value);
                        }
                        break;
                        
                    case "NombreCodigoExpediente":
                        if (red1.NombreCodigoExpediente == null && red2.NombreCodigoExpediente != null)
                        {
                            returnValue = red2.NombreCodigoExpediente.CompareTo(string.Empty);
                        }
                        else if (red1.NombreCodigoExpediente != null && red2.NombreCodigoExpediente == null)
                        {
                            returnValue = string.Empty.CompareTo(red1.NombreCodigoExpediente);
                        }
                        else if (red1.NombreCodigoExpediente == null && red2.NombreCodigoExpediente == null)
                        {
                            returnValue = 1;
                        }
                        else
                        {
                            returnValue = red2.NombreCodigoExpediente.CompareTo(red1.NombreCodigoExpediente);
                        }
                        break;
                        
                        
                         break;
                    case "NombreEnlace": returnValue = red2.NombreEnlace.CompareTo(red1.NombreEnlace); break;
                    case "Estado": returnValue = red2.Estado.CompareTo(red1.Estado); break;
                    case "DescEstadoLegalizacionEnlace": returnValue = red2.DescEstadoLegalizacionEnlace.CompareTo(red1.DescEstadoLegalizacionEnlace); break;
                    case "DatosCompletos": returnValue = red2.DatosCompletos.CompareTo(red1.DatosCompletos); break;
                    case "EstaImplementado": returnValue = red2.EstaImplementado.CompareTo(red1.EstaImplementado); break;                   
                }
            }

            return returnValue;
        }

        #endregion
    }
}
